package com.itzmn.newcode.offer1;

/**
 * @Author: 张梦楠
 * @Date: 2018/12/18 09:32
 * 简书：https://www.jianshu.com/u/d611be10d1a6
 * 码云：https://gitee.com/zhangqiye
 * @Description: 二维数组中的查找
 *
 * 在一个二维数组中（每个一维数组的长度相同），每一行都按照从左到右递增的顺序排序，
 * 每一列都按照从上到下递增的顺序排序。请完成一个函数，
 * 输入这样的一个二维数组和一个整数，判断数组中是否含有该整数。
 *
 * 思路：因为数组从左到右是递增的，从上到下是递增的，那么我们要找某个数，
 * 需要比大小， 这个数比数组的数大，和谁比，比数组的数小，和谁比，所以需要找到一个正确的
 * 位置，就是左下角，比较，比数组数大，向右，因为右边数值大，比数组值小，就想上，
 * 向上是减小的
 *
 */
public class _1_FindInTwoDimensionalArray {

    public static void main(String[] args) {

        new _1_FindInTwoDimensionalArray().test();
    }
    public void test(){
        boolean find = Find(3, new int[][]{{1, 5, 8, 10}, {2, 6, 9, 11}, {3, 7, 10, 12}});
        System.out.println(find);
    }

    public boolean Find(int target, int [][] array) {

        int row = array.length;
        int col = array[0].length;
        if (row == 0){
            return false;
        }

        int i= row-1;
        int j = 0;
        while (i<=row-1&&i>=0 && j<=col-1&& j>=0){
            if (array[i][j]>target){
                i--;
                continue;
            }
            if (array[i][j] == target){
                return true;
            }
            if (array[i][j] < target){
                j++;
                continue;
            }
        }
        return false;
    }
}
